#include "util.h"


util::FileReader::FileReader(std::string path){
	this->init( std::fopen(path.c_str(),"r") );
}

util::FileReader::FileReader(std::FILE* f){
	this->init(f);
}

void util::FileReader::init(std::FILE* f){
	_f = f;
	readMore();
}

const char* util::FileReader::stream(){
	return std::string( (_buffer+_pos+1) ).c_str();
}

void util::FileReader::moveUntilN(){
	while( getChar()!= '\n' ){};
}

void util::FileReader::move(int size){
	_pos+=size;
	if( _pos >=BUFFER_SIZE ){
		readMore();
	}
}

int util::FileReader::readMore(){

	int charread = fread( _buffer,sizeof(char),BUFFER_SIZE,_f);
	_pos = -1;

	return charread;
}

char util::FileReader::getChar(){
	if( _pos >= BUFFER_SIZE-1 ) readMore();
	return _buffer[++_pos];
}

void util::FileReader::print(std::ostream& o){
	std::fseek(_f,0,SEEK_SET);
	int charread;
	while( feof(_f)==0 ){
		charread = readMore();
		o << std::string(_buffer,charread);
	}

	std::fseek(_f,0,SEEK_SET);
	readMore();
}

void util::FileReader::close(){
    std::fclose(_f);
}
